#if !defined(__APP_SERIAL)
#define __APP_SERIAL

#include <termios.h>
#include <unistd.h>
#include "app_device.h"

// 波特率枚举
typedef enum
{
    BAUD_9600 = B9600,
    BAUD_19200 = B19200,
    BAUD_38400 = B38400,
    BAUD_57600 = B57600,
    BAUD_115200 = B115200
} BaudRate;

// 停止位枚举
typedef enum
{
    ONE = 0,
    TWO = CSTOPB
} StopBits;

// 数据位枚举
typedef enum
{
    DB5 = CS5,
    DB6 = CS6,
    DB7 = CS7,
    DB8 = CS8
} DataBits;

// 校验位枚举
typedef enum
{
    NONE = 0,
    EVEN = PARENB,
    ODD = PARENB | PARODD
} Parity;

// 串口设备
typedef struct
{
    Device super; // 父类设备
    BaudRate baud_rate; // 波特率
    Parity parity; // 校验位
    DataBits data_bits; // 数据位
    StopBits stop_bits; // 停止位
} SerialDevice;

/**
 * @brief 初始化串口设备
 * @param filename 串口设备文件名
 * @param baud_rate 波特率
 * @return 0: 成功, -1: 失败
 */
SerialDevice *app_serial_init(char *filename, BaudRate baud_rate);

/**
 * @brief 设置串口连接类型
 * @param device 串口设备
 * @param type 连接类型
 * @return 0: 成功, -1: 失败
 */
int app_serial_setConnectionType (SerialDevice *device, ConnectionType type);

#endif // __APP_SERIAL
